package com.mofum.cloud.core.model;

import java.math.BigInteger;
import java.util.Map;

/**
 * 设备
 * ===================================================================
 * <p> 设备
 * ===================================================================
 *
 * @author yumi@omuao.com
 */
public interface Device {

    /**
     * 初始化内容
     */
    void init();

    /**
     * 获取设备ID
     *
     * @return id
     */
    BigInteger getId();

    /**
     * 设置设备ID
     *
     * @param id id
     */
    void setId(BigInteger id);

    /**
     * 设置指令名称
     *
     * @param name 指令名称
     */
    void setName(String name);

    /**
     * 获得指令名称
     *
     * @return 指令名称
     */
    String getName();

    /**
     * 设置设备类型
     *
     * @param deviceType 设备类型
     */
    void setDeviceType(DeviceType deviceType);

    /**
     * 获得设备类型
     *
     * @return 设备类型
     */
    DeviceType getDeviceType();

    /**
     * 获取设备能力集合
     *
     * @return 设备能力
     */
    Map<String, Object> getAbilityMap();

    /**
     * 设置设备能力集合
     *
     * @param abilityMap 能力集合
     */
    void setAbilityMap(Map<String, Object> abilityMap);

    /**
     * 放一个能力
     *
     * @param key   键
     * @param value 值
     */
    void putAbility(String key, Object value);

    /**
     * 移除一个能力
     *
     * @param key 能力键
     */
    void removeAbility(String key);

    /**
     * 获取一个能力
     *
     * @param key 键
     * @return 值
     */
    Object getAbility(String key);

    /**
     * 是否包含某个能力
     *
     * @param key 能力
     * @return true 包含,false 不包含
     */
    default boolean containsAbility(String key) {
        return getAbility(key) != null;
    }
}
